package cci;

import cdp.Cliente;
import cdp.TipoCliente;
import cgd.ClienteDao;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "ClienteCtrl", urlPatterns = {"/Cliente"})
public class ClienteCtrl extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RequestDispatcher cih;
        String evento = request.getParameter("evento");
        if (evento == null) {
            String mensagem = "Pagina nao encontrada.";
            cih = request.getRequestDispatcher("modulos/admin/index.jsp?mensagem=" + mensagem);
            cih.forward(request, response);
            return;
        }
        try {
            if (evento.equals("alterar")) {
                Cliente cliente = ClienteDao.getInstance().consultar(
                        Integer.parseInt(request.getParameter("id")));
                request.setAttribute("cliente", cliente);
            } else if (evento.equals("consultar")) {
                List<Cliente> listaClientes = ClienteDao.getInstance().obterTodos();
                request.setAttribute("listaClientes", listaClientes);
            } else if (evento.equals("atualizarClientes")) {
                List<Cliente> listaClientes = ClienteDao.getInstance().obterTodos();
                request.setAttribute("listaClientes", listaClientes);
                cih = request.getRequestDispatcher(
                        "modulos/admin/acao/" + evento + ".jsp");
                cih.forward(request, response);
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        cih = request.getRequestDispatcher(
                "modulos/admin/cliente/" + evento + ".jsp");
        cih.forward(request, response);
        return;
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String mensagem = "";
        String evento = request.getParameter("evento");
        try {
            if (evento.equals("incluir") || evento.equals("alterar")) {
                mensagem = inserirOuAlterar(request);
            } else if (evento.equals("consultar")) {
            } else if (evento.equals("excluir")) {
                Cliente cliente = ClienteDao.getInstance().consultar(
                        Integer.parseInt(request.getParameter("id")));
                ClienteDao.getInstance().excluir(cliente);
                mensagem = "Cliente exluido com sucesso";
            } else if (evento.equals("atualizarClientes")) {
                List<Cliente> listaClientes = ClienteDao.getInstance().obterTodos();
                for (Cliente cliente : listaClientes) {
                    if (cliente.getTotalCompra() >= 300.0) {
                        cliente.setTipoCliente(TipoCliente.VIP);
                        ClienteDao.getInstance().salvar(cliente);
                    }
                }
                mensagem = "Operação realizada com sucesso";
            } else if (evento.equals("zerarMes")) {
                List<Cliente> listaClientes = ClienteDao.getInstance().obterTodos();
                for (Cliente cliente : listaClientes) {
                    cliente.setTipoCliente(TipoCliente.NORMAL);
                    cliente.setTotalCompra(0);
                    ClienteDao.getInstance().salvar(cliente);
                }
                mensagem = "Operação realizada com sucesso";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.sendRedirect("admin.jsp?mensagem=" + mensagem);
        return;

    }

    private String inserirOuAlterar(HttpServletRequest request) {
        try {
            Cliente cliente;
            if (request.getParameter("id") == null) {
                cliente = new Cliente();
            } else {
                cliente = ClienteDao.getInstance().consultar(Integer.parseInt(request.getParameter("id")));
            }

            cliente.setNome(request.getParameter("nome"));
            cliente.setSenha(request.getParameter("senha"));
            cliente.setIdade(Integer.parseInt(request.getParameter("idade")));
            cliente.setEndereco(request.getParameter("endereco"));
            cliente.setDataCadastro(new Date());

            ClienteDao.getInstance().salvar(cliente);

            return "Operacao realizada com sucesso.";
        } catch (Exception e) {
            //TODO Tratar excecao
            e.printStackTrace();
            return "Erro ao realizar essa operacao.";
        }
    }
}
